// pages/play/play.js
Page({

    /**
     * 页面的初始数据
     */
    data: {
        //音乐歌手
        musicName: "",
        // 竖向滚动条初始值为0
        marginTop: 0,
        // 当前的滚动的index
        currentIndex: 0,
        //音乐列表
        musicList: [],
        //当前音乐的索引
        nowIndex: "",
        //当前歌曲数据
        music: {},
        //音乐id
        musicId: '',
        // 播放音乐控制
        action: {
            "method": "play"
        },
        // 定义歌词数据
        lrcdata: [],
        // 定义默认的播放模式
        mode: "loop1",
        // 设置播放时间
        playtime: "00:00",
        // 结束时间
        endtime: "00:00",
        // 歌曲进度条最大值
        max: 100,
        // 进度条读取移动的值
        move: 0,
        // 歌曲来源
        comeMusic: 0
    },
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        //监听数据
        const eventChannel = this.getOpenerEventChannel();
        eventChannel.on('acceptDataFromOpenerPage', (data) => {
            console.log(data);
            const {nowIndex} = data.data;
            const {musiclist} = data.data;
            const {comeMusic} = data.data;
            //当前播放歌曲
            const music = musiclist[nowIndex];
            console.log(music);
            this.setData({
                nowIndex: nowIndex,
                musicList: musiclist,
                musicId: music.id,
                musicName:music.name,
                comeMusic: comeMusic
            });
        });
        //调用获取歌曲详情方法
        this.getMusicDetail();
        // 获取歌词
        this.getlrc();
        //进行最近播放的设置
        this.setplayMusicIdAndusername();
    },
    //获取歌曲详情方法
    getMusicDetail() {
        wx.request({
            url: `http://localhost:8081/song/detail?ids=${this.data.musicId}`,
            success: (result) => {
                // console.log(result.data.songs[0]);
                this.setData({
                    music: result.data.songs[0],
                    musicName: result.data.songs[0].name
                });
            },
        })

        // 进行最近播放设置
        this.setplayMusicIdAndusername();
    },
    //播放的控制
    playdata() {
        // 获取当前状态
        const {
            method
        } = this.data.action;
        // 判断当前状态
        if (method === "play") {
            this.setData({
                action: {
                    "method": "pause"
                }
            });
        } else {
            this.setData({
                action: {
                    "method": "play"
                }
            });
        }

    },
    // 获取歌词
    getlrc: function () {
        wx.request({
            url: `http://localhost:8081/lyric?id=${this.data.musicId}`,
            success: (result) => {
                const {
                    lyric
                } = result.data.lrc;
                //   整理歌词
                this.setLrcShow(lyric);
            },
        })
    },
    // 整理歌词
    setLrcShow(lyric) {
        // 定义空列表
        let lrclist = [];
        // 拆分段落
        const lric = lyric.split("\n");
        // 分离歌词和时间
        // 定义正则表达式
        const re = /\[\d{2}:\d{2}\.\d{2,3}\]/;
        // 遍历列表
        lric.forEach(item => {
            if (item !== null) {
                // 获取时间
                let itemdate = item.match(re);
                // 判断删除掉空时间
                if (itemdate) {
                    itemdate = itemdate[0];
                    // 整理时间-拆分出中括号
                    itemdate = itemdate.slice(1, -1);
                    // 00:20:090 转换成具体运算意义的毫秒
                    const timelist = itemdate.split(":");
                    const time0 = timelist[0];
                    const time1 = timelist[1];
                    // 整理拿到的最终的时间值
                    const time = parseFloat(time0) * 60 + parseFloat(time1)
                    // 找歌词 替换方法把符合时间的清除掉
                    const lrcstr = item.replace(re, "");
                    // 将歌词和时间进行匹配整合存储到列表中
                    lrclist.push([time, lrcstr]);
                }
            }
        });
        // 存储
        this.setData({
            lrcdata: lrclist
        });
    },
    // 切换音乐
    changeMusic(e) {
        const {
            change
        } = e.currentTarget.dataset;
        if (change === "last") {
            let index = this.data.nowIndex - 1;
            if (index < 0) {
                this.setData({
                    nowIndex: this.data.musicList.length - 1
                });
            } else {
                this.setData({
                    nowIndex: index
                });
            }
        } else {
            let index = this.data.nowIndex + 1;
            if (index >= this.data.musicList.length) {
                this.setData({
                    nowIndex: 0
                });
            } else {
                this.setData({
                    nowIndex: index
                });
            }
        }
        if (this.data.nowIndex >= 0 && this.data.nowIndex < this.data.musicList.length) {
            // 获取切换到要切换的音乐
            const music = this.data.musicList[this.data.nowIndex];
            this.setData({
                musicId: music.id,
                action: {
                    "method": "pause"
                }
            });
            //调用获取歌曲详情方法
            this.getMusicDetail();
            //获取歌词
            this.getlrc();
            // // 进行最近播放设置
            // this.setplayMusicIdAndusername();
            this.setData({
                action: {
                    "method": "play"
                }
            });
        } else {}
    },
    // 播放进度改变时触发的方法，能实现歌词滚动
    changeTime(e) {
        // 获取当前播放进度
        let currentTime = e.detail.currentTime;
        // 获取当前歌曲的总时长
        let duration = e.detail.duration;
        // 计算播放的时间 分、秒
        let playMinutes = Math.floor(currentTime / 60);
        let playseconds = Math.floor(currentTime % 60);
        // 计算总时长
        let endMinutes = Math.floor(duration / 60);
        let endSeconds = Math.floor(duration % 60);
        // 计算data中的max，进度条最大取值
        var max = duration;
        // 计算进度条移动的值
        var move = currentTime;
        // 判断分秒是否小于10
        if (playMinutes < 10) {
            playMinutes = "0" + playMinutes;
        }
        if (playseconds < 10) {
            playseconds = "0" + playseconds
        }
        if (endMinutes < 10) {
            endMinutes = "0" + endMinutes
        }
        if (endSeconds < 10) {
            endSeconds = "0" + endSeconds
        }
        this.setData({
            playtime: playMinutes + ":" + playseconds,
            endtime: endMinutes + ":" + endSeconds,
            max: max,
            move: move
        });
        // 获取歌词数字
        var lyricArray = this.data.lrcdata;
        // 计算滚动条的位置
        if (this.data.currentIndex >= 8) {
            this.setData({
                marginTop: (this.data.currentIndex - 8) * 30
            });
        }
        // 遍历所有歌词
        // 最后一句歌词没有下一句，所以不需要跟下一句的时间做比较
        if (this.data.currentIndex == 1 && lyricArray.length - 2) {
            // 正在唱最后一句
            this.setData({
                currentIndex: lyricArray.length - 1
            });
        } else {
            for (let i = 0; i < lyricArray.length - 1; i++) {
                // 将每个歌词进度跟数组中的歌词比较，在当前歌词的时间到下一句歌词的时间范围之内
                if (currentTime >= lyricArray[i][0] && currentTime < lyricArray[i + 1][0]) {
                    // 设置正在播放的行号
                    this.setData({
                        currentIndex: i
                    });
                }
            }
        }
        // console.log(currentTime);
    },
    // 改变播放模式
    changeMode(e) {
        // 获取当前的播放模式
        if (this.data.mode === "single") {
            // 切换列表循环模式
            this.setData({
                mode: "loop1"
            });
        } else {
            // 切换为单曲循环模式
            this.setData({
                mode: "single"
            });
        }
    },
    // 改变音乐播放模式
    changeMusic1() {
        var mode = this.data.mode;
        if (mode == "single") {
            // 将当前的id重新设置
            this.setData({
                nowIndex: this.data.nowIndex
            });
        } else {
            let index = this.data.nowIndex + 1;
            if (index >= this.data.musicList.length) {
                this.setData({
                    nowIndex: 0
                });
            } else {
                this.setData({
                    nowIndex: index
                });
            }
        }
        // 获取切换到要切换的音乐
        const music = this.data.musicList[this.data.nowIndex];
        this.setData({
            music: music,
            musicId: music.id,
            action: {
                "method": "pause"
            }
        });
        this.getlrc();
        this.setData({
            action: {
                "method": "play"
            }
        });
    },
    // 进度条拖动
    toDong(e) {
        //当前拖动的value值
        var value = e.detail.value;
        // 修改进度条取值和音频进度
        this.setData({
            move: value,
            action: {
                method: "setCurrentTime",
                data: value
            }
        })
    },
    //将正在播放的用于存入数据库
    setplayMusicIdAndusername() {
        if (wx.getStorageSync('username')) {
            wx.request({
                url: 'http://localhost:8081/addrecentplay',
                method: "POST",
                data: {
                    username: wx.getStorageSync('username'),
                    id: this.data.musicId,
                    musicName: this.data.musicName
                },
            })
        }
    }
})